///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: cond.c
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* 功能描述: 系统日志
//* QQ:	2085827949
//**********************************************************************/

//#include "lap_lib.h"


// 条件变量测试


#if 0	//功能测试
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>



char buff[100]={0};

 pthread_mutex_t mutex;
 pthread_cond_t cond;


 void fun(int a)
{
	
	//子线程上锁
	pthread_mutex_lock(&mutex);
	
	pthread_cond_wait(&cond,&mutex);//等待条件变量信号
	printf("son thread unlocked!\n");
	
	pthread_mutex_unlock(&mutex);
	pthread_exit(NULL);
}


pthread_t th = -1;
/*********************************************************************************
** 函数名称: lap_treads
** 功能描述: 
** 输入参数:         
** 输出参数: None.
** 返回参数: return .
**********************************************************************************/
void lap_tread(void)
{
	int ret = -1;
	
	ret = pthread_create(&th,NULL,fun,NULL);
	if(ret != 0)
	{
		printf("pthread_create Err!\n");
		return;
	}
}



int main(void)
{

	int ret = -1;
	//创建子线程
	lap_tread();

	//初始化互斥锁
	ret = pthread_mutex_init(&mutex,NULL);
	if(ret !=0)
	{
		printf("pthread_mutex_init Err!\n");
		return -1;
	}

	//初始化条件变量
	pthread_cond_init(&cond,NULL);
	
	while(1)
	{
		printf("输入'unlock' 解锁子线程\n");
		scanf("%s",buff);
		if(!strncmp(buff,"unlock",8))
		{
			printf("等待回收子线程......\n");
			
			//给子进程发送条件变量信号
			pthread_cond_signal(&cond);
			break;
		}
		printf("输入字符：%s\n\n\n",buff);
		memset(buff,0,sizeof(buff));
	}

	printf("子线程回收ing......\n");
	//回收子线程
	pthread_join(th,NULL);
	printf("子线程回收成功......\n");
	return 0;
}
#endif







																						 
